]> dgit.raspbian.org Git - gnome-shell.git/commitdiff
ShellKeyringPrompt: Strip out mnemonics indicators from labels
authorWatson Yuuma Sato <yuuma.sato@gmail.com>
Sun, 7 Jun 2015 21:48:51 +0000 (18:48 -0300)
committerStef Walter <stefw@redhat.com>
Tue, 9 Jun 2015 09:45:47 +0000 (11:45 +0200)
Currently GNOME Shell doesn't support mnemonics and prompters may
send labels with it.

Remove the mnemonics indicator for now.

Signed-off-by: Stef Walter <stefw@redhat.com>
 * Fixed style issue

https://bugzilla.gnome.org/show_bug.cgi?id=750465

src/shell-keyring-prompt.c

index e07cd1e3f6787d89d917870dc4e6f89a4b7bf27b..85b4e00e02e543ff2af30594f850c39160de25c9 100644 (file)
@@ -111,6 +111,34 @@ shell_keyring_prompt_init (ShellKeyringPrompt *self)
 
 }
 
+static gchar *
+remove_mnemonics (const GValue *value)
+{
+  const gchar mnemonic = '_';
+  gchar *stripped_label, *temp;
+  const gchar *label;
+
+  g_return_val_if_fail (value != NULL, NULL);
+  g_return_val_if_fail (G_VALUE_HOLDS_STRING (value), NULL);
+
+  label = g_value_get_string (value);
+  g_return_val_if_fail (label != NULL, NULL);
+
+  /* Stripped label will have the original label lenght at most */
+  stripped_label = temp = g_new (gchar, strlen(label) + 1);
+  g_assert (stripped_label != NULL);
+
+  while (*label != '\0')
+    {
+      if (*label == mnemonic)
+        label++;
+      *(temp++) = *(label++);
+    }
+  *temp = '\0';
+
+  return stripped_label;
+}
+
 static void
 shell_keyring_prompt_set_property (GObject      *obj,
                                    guint         prop_id,
@@ -145,7 +173,7 @@ shell_keyring_prompt_set_property (GObject      *obj,
     break;
   case PROP_CHOICE_LABEL:
     g_free (self->choice_label);
-    self->choice_label = g_value_dup_string (value);
+    self->choice_label = remove_mnemonics (value);
     if (!self->choice_label)
         self->choice_label = g_strdup ("");
     g_object_notify (obj, "choice-label");
@@ -165,12 +193,12 @@ shell_keyring_prompt_set_property (GObject      *obj,
     break;
   case PROP_CONTINUE_LABEL:
     g_free (self->continue_label);
-    self->continue_label = g_value_dup_string (value);
+    self->continue_label = remove_mnemonics (value);
     g_object_notify (obj, "continue-label");
     break;
   case PROP_CANCEL_LABEL:
     g_free (self->cancel_label);
-    self->cancel_label = g_value_dup_string (value);
+    self->cancel_label = remove_mnemonics (value);
     g_object_notify (obj, "cancel-label");
     break;
   case PROP_PASSWORD_ACTOR: